package com.moon.back.annotation;

import java.lang.annotation.*;
import java.util.concurrent.TimeUnit;

/**
 * @author Administrator
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Debounce {
    /**
     * 防抖时间窗口（默认500毫秒）
     */

     long waiting() default 1L ;

    /**
     * 时间单位（默认毫秒）
     */
    TimeUnit unit() default TimeUnit.MILLISECONDS;
    
    /**
     * 防抖key的生成规则（SpEL表达式）
     */
    String key() default "";

    Strategy strategy() default Strategy.LAST;


    /**
     * 防抖窗口时间（单位由unit指定）
     * 最大限制10分钟，防止误配置
     */
    enum Strategy {
        // 执行第一次请求
        FIRST,
        // 执行最后一次请求
        LAST
    }
}